package com.daJiao.controller.api;

import com.daJiao.domain.WrapMapper;
import com.daJiao.domain.Wrapper;
import com.daJiao.properties.WxMpProperties;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import me.chanjar.weixin.common.bean.menu.WxMenu;
import me.chanjar.weixin.common.bean.menu.WxMenuButton;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.menu.WxMpGetSelfMenuInfoResult;
import me.chanjar.weixin.mp.bean.menu.WxMpMenu;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.net.MalformedURLException;

import static me.chanjar.weixin.common.api.WxConsts.MenuButtonType;

/**
 * <p>Title:      WxMenuController. </p>
 * <p>Description 菜单管理 </p>
 * <p>Copyright: Copyright (c) 2016</p>
 * <p>Company:    医百科技有限公司 </p>
 *
 * @author <a href="yangwensheng@100doc.com.cn"/>杨文生</a>
 * @since 2021/2/27 17:30
 */
@RestController
@RequestMapping("/wx/menu")
@Api(tags = "微信菜单管理", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class ApiWxMenuController {

    @Resource
    private WxMpService wxService;

    @Resource
    private WxMpProperties wxMpProperties;

    /**
     * <pre>
     * 自定义菜单创建接口
     * 详情请见：https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013&token=&lang=zh_CN
     * 如果要创建个性化菜单，请设置matchrule属性
     * 详情请见：https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455782296&token=&lang=zh_CN
     * </pre>
     *
     * @return 如果是个性化菜单，则返回menuid，否则返回null
     */
    @PostMapping("/create")
    @ApiOperation(notes = "自定义菜单创建接口", httpMethod = "POST", value = "自定义菜单创建接口")
    public Wrapper<String> menuCreate(@RequestBody WxMenu menu) throws WxErrorException {
        String appId = wxMpProperties.getConfigs().get(0).getAppId();
        String create = this.wxService.switchoverTo(appId).getMenuService().menuCreate(menu);
        return WrapMapper.ok(create);
    }

    /**
     * 自定义菜单创建接口
     *
     * @return String
     * @throws WxErrorException
     * @throws MalformedURLException
     */
    @GetMapping("/create")
    @ApiOperation(notes = "自定义菜单创建接口1", httpMethod = "GET", value = "自定义菜单创建接口1")
    public Wrapper<String> menuCreateSample() throws WxErrorException, MalformedURLException {
        WxMenu menu = new WxMenu();

        WxMenuButton nurseWorkBtn = new WxMenuButton();
        nurseWorkBtn.setType(MenuButtonType.VIEW);
        nurseWorkBtn.setName("护士工作台");
        nurseWorkBtn.setUrl("http://yntx.hdvision.cn/nurse/index.html");
        menu.getButtons().add(nurseWorkBtn);


        WxMenuButton patentSercieBtn = new WxMenuButton();
        patentSercieBtn.setType(MenuButtonType.VIEW);
        patentSercieBtn.setName("患者服务");
        patentSercieBtn.setUrl("http://yntx.hdvision.cn/index.html");
        menu.getButtons().add(patentSercieBtn);


        String appId = wxMpProperties.getConfigs().get(0).getAppId();

        this.wxService.switchover(appId);
        String create = this.wxService.getMenuService().menuCreate(menu);
        return WrapMapper.ok(create);
    }

    /**
     * <pre>
     * 自定义菜单创建接口
     * 详情请见： https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013&token=&lang=zh_CN
     * 如果要创建个性化菜单，请设置matchrule属性
     * 详情请见：https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455782296&token=&lang=zh_CN
     * </pre>
     *
     * @return 如果是个性化菜单，则返回menuid，否则返回null
     */
    @PostMapping("/createByJson")
    @ApiOperation(notes = "自定义菜单创建接口(json字符串)", httpMethod = "POST", value = "自定义菜单创建接口(json字符串)")
    public Wrapper<String> menuCreate(@RequestBody String json) throws WxErrorException {
        String appId = wxMpProperties.getConfigs().get(0).getAppId();
        String create = this.wxService.switchoverTo(appId).getMenuService().menuCreate(json);
        return WrapMapper.ok(create);
    }

    /**
     * <pre>
     * 自定义菜单删除接口
     * 详情请见: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141015&token=&lang=zh_CN
     * </pre>
     */
    @DeleteMapping("/delete")
    @ApiOperation(notes = "自定义菜单删除接口", httpMethod = "DELETE", value = "自定义菜单删除接口")
    public Wrapper<?> menuDelete() throws WxErrorException {
        String appId = wxMpProperties.getConfigs().get(0).getAppId();
        wxService.switchoverTo(appId).getMenuService().menuDelete();
        return WrapMapper.ok();
    }

    /**
     * <pre>
     * 删除个性化菜单接口
     * 详情请见: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455782296&token=&lang=zh_CN
     * </pre>
     *
     * @param menuId 个性化菜单的menuid
     */

    @GetMapping("/delete/{menuId}")
    @ApiOperation(notes = "根据菜单id删除个性化菜单接口", httpMethod = "GET", value = "根据菜单id删除个性化菜单接口")
    public Wrapper<?> menuDelete(@PathVariable String menuId) throws WxErrorException {
        String appId = wxMpProperties.getConfigs().get(0).getAppId();
        wxService.switchoverTo(appId).getMenuService().menuDelete(menuId);
        return WrapMapper.ok();
    }

    /**
     * <pre>
     * 自定义菜单查询接口
     * 详情请见： https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141014&token=&lang=zh_CN
     * </pre>
     */
    @GetMapping("/get")
    @ApiOperation(notes = "自定义菜单查询接口", httpMethod = "GET", value = "自定义菜单查询接口")
    public Wrapper<WxMpMenu> menuGet() throws WxErrorException {
        String appId = wxMpProperties.getConfigs().get(0).getAppId();
        me.chanjar.weixin.mp.bean.menu.WxMpMenu wxMpMenu = this.wxService.switchoverTo(appId).getMenuService().menuGet();
        return WrapMapper.ok(wxMpMenu);
    }

    /**
     * <pre>
     * 测试个性化菜单匹配结果
     * 详情请见: http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html
     * </pre>
     *
     * @param userid 可以是粉丝的OpenID，也可以是粉丝的微信号。
     */
    @GetMapping("/menuTryMatch/{userid}")
    @ApiOperation(notes = "个性化菜单匹配结果", httpMethod = "GET", value = "个性化菜单匹配结果")
    public Wrapper<WxMenu> menuTryMatch(@PathVariable String userid) throws WxErrorException {
        String appId = wxMpProperties.getConfigs().get(0).getAppId();
        WxMenu wxMenu = this.wxService.switchoverTo(appId).getMenuService().menuTryMatch(userid);
        return WrapMapper.ok(wxMenu);
    }

    /**
     * <pre>
     * 获取自定义菜单配置接口
     * 本接口将会提供公众号当前使用的自定义菜单的配置，如果公众号是通过API调用设置的菜单，则返回菜单的开发配置，而如果公众号是在公众平台官网通过网站功能发布菜单，则本接口返回运营者设置的菜单配置。
     * 请注意：
     * 1、第三方平台开发者可以通过本接口，在旗下公众号将业务授权给你后，立即通过本接口检测公众号的自定义菜单配置，并通过接口再次给公众号设置好自动回复规则，以提升公众号运营者的业务体验。
     * 2、本接口与自定义菜单查询接口的不同之处在于，本接口无论公众号的接口是如何设置的，都能查询到接口，而自定义菜单查询接口则仅能查询到使用API设置的菜单配置。
     * 3、认证/未认证的服务号/订阅号，以及接口测试号，均拥有该接口权限。
     * 4、从第三方平台的公众号登录授权机制上来说，该接口从属于消息与菜单权限集。
     * 5、本接口中返回的图片/语音/视频为临时素材（临时素材每次获取都不同，3天内有效，通过素材管理-获取临时素材接口来获取这些素材），本接口返回的图文消息为永久素材素材（通过素材管理-获取永久素材接口来获取这些素材）。
     *  接口调用请求说明:
     * http请求方式: GET（请使用https协议）
     * https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=ACCESS_TOKEN
     * </pre>
     */
    @GetMapping("/getSelfMenuInfo")
    @ApiOperation(notes = "获取自定义菜单配置接口", httpMethod = "GET", value = "获取自定义菜单配置接口")
    public Wrapper<WxMpGetSelfMenuInfoResult> getSelfMenuInfo() throws WxErrorException {
        String appId = wxMpProperties.getConfigs().get(0).getAppId();
        WxMpGetSelfMenuInfoResult selfMenuInfo = this.wxService.switchoverTo(appId).getMenuService().getSelfMenuInfo();
        return WrapMapper.ok(selfMenuInfo);
    }
}
